package com.xinke.edu.mypetadoption.fragment3;

import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;

import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.xinke.edu.mypetadoption.R;
import com.xinke.edu.mypetadoption.databinding.FragmentGlyItemBinding;
import com.xinke.edu.mypetadoption.entity.Merchant;
import com.xinke.edu.mypetadoption.entity.ResultBody;
import com.xinke.edu.mypetadoption.fragment3.adpter.ZzAdpter;
import com.xinke.edu.mypetadoption.util.RetrofitUtil;

import java.util.List;

import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
import io.reactivex.rxjava3.core.Observer;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;

/**
 * 商家审核Fragment
 * 负责显示商家列表和处理审核操作
 */
public class ZzFragment extends Fragment {

    // 布局绑定对象
    private FragmentGlyItemBinding binding;
    // 商家审核适配器
    private ZzAdpter zzAdpter;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, 
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        // 初始化视图绑定
        binding = FragmentGlyItemBinding.inflate(inflater, container, false);
        return binding.getRoot();
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // 初始化适配器
        zzAdpter = new ZzAdpter();
        // 设置状态更新监听器，用于状态变更后刷新列表
        zzAdpter.setOnStatusUpdateListener(statusUpdateListener);
        
        // 设置RecyclerView的布局管理器为线性布局
        binding.recyclerview.setLayoutManager(
                new LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
        );
        // 设置适配器
        binding.recyclerview.setAdapter(zzAdpter);
        
        // 初始加载数据
        loadMerchantData();
    }

    /**
     * 刷新数据方法
     * 当商家状态更新后，通过此方法重新加载数据
     */
    public void refreshData() {
        Log.d("ZzFragment", "刷新商家审核数据");
        loadMerchantData();
    }

    /**
     * 加载商家数据
     * 从服务器获取商家审核列表
     */
    private void loadMerchantData() {
        Log.d("ZzFragment", "开始加载商家审核数据");
        
        // 调用API获取未审核商家列表
        RetrofitUtil.getApi().selAccreditation()
                .subscribeOn(Schedulers.io()) // 在IO线程执行网络请求
                .observeOn(AndroidSchedulers.mainThread()) // 在主线程处理结果
                .subscribe(new Observer<ResultBody<List<Merchant>>>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                        // 订阅成功，这里可以显示加载指示器
                    }

                    @Override
                    public void onNext(@NonNull ResultBody<List<Merchant>> result) {
                        // 成功获取数据
                        if (result != null && result.getCode() == 200) {
                            List<Merchant> list = result.getData();

                            if (list != null && !list.isEmpty()) {
                                Log.d("ZzFragment", "加载到 " + list.size() + " 个商家信息");
                                
                                // 直接使用addAll方法替换现有数据
                                zzAdpter.addAll(list);
                                
                                // 调试信息：打印第一个商家的详细信息
                                if (list.size() > 0) {
                                    Merchant firstMerchant = list.get(0);
                                    Log.d("ZzFragment", "第一个商家信息：" + 
                                          "ID=" + firstMerchant.getId() + 
                                          ", 名称=" + firstMerchant.getName() +
                                          ", 联系人=" + firstMerchant.getContactPerson() +
                                          ", 电话=" + firstMerchant.getContactPhone() +
                                          ", 状态=" + firstMerchant.getStatus());
                                }
                            } else {
                                Log.d("ZzFragment", "未加载到商家数据");
                                Toast.makeText(requireContext(), "暂无数据", Toast.LENGTH_SHORT).show();
                                // 对于空数据情况，我们不做特殊处理，让addAll自然处理
                            }
                        } else {
                            Log.e("ZzFragment", "API返回错误：" + (result != null ? result.getMessage() : "未知错误"));
                            Toast.makeText(requireContext(), "加载失败：" + (result != null ? result.getMessage() : "未知错误"), Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                        // 网络请求失败
                        Log.e("ZzFragment", "加载数据失败", e);
                        Toast.makeText(requireContext(), "网络请求失败：" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onComplete() {
                        // 请求完成
                        Log.d("ZzFragment", "数据加载请求完成");
                    }
                });
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        // 避免内存泄漏
        binding = null;
    }
    
    /**
     * 商家状态更新监听器实现
     * 当商家状态发生变化时，自动刷新列表数据
     */
    private ZzAdpter.OnStatusUpdateListener statusUpdateListener = new ZzAdpter.OnStatusUpdateListener() {
        @Override
        public void onStatusUpdated() {
            // 状态更新后刷新数据
            refreshData();
        }
    };
}